mi024

College project "Projet IAD" master 1
git clone https://esimon.eu/repos/mi024.git
Log | Files | Refs | README

operational plan.tex (6323B)


      1 \documentclass[11pt,a4paper]{report}
      2 \usepackage{setspace}
      3 \usepackage{graphicx}
      4 \usepackage{epstopdf}
      5 \usepackage[T1]{fontenc}
      6 \usepackage[utf8]{inputenc}
      7 \usepackage[french]{babel}
      8 
      9 \newcommand{\nmlp}{\textsc{nmlp}}
     10 \renewcommand{\thesection}{\arabic{section}}
     11 
     12 \begin{document}
     13 \begin{titlepage}
     14 \begin{center}
     15 	\begin{minipage}{0.58\textwidth}
     16 		\includegraphics[width=\textwidth]{images/UPMC_logotype}
     17 	\end{minipage}
     18 	\begin{minipage}{0.4\textwidth}
     19 		\begin{center}
     20 		\texttt{M I 0 2 4}\\
     21 		\vspace{2ex}
     22 		\textbf{\Large Projet IAD}
     23 		\end{center}
     24 	\end{minipage}
     25 	\vfill
     26 	\begin{spacing}{2}
     27 	\textbf{\textsc{\huge Vers une Machine d'apprentissage persistante}}
     28 	\end{spacing}
     29 	\vspace{0.1\textheight}
     30 	{\LARGE Plan de développement}\\
     31 	\vspace{0.1\textheight}
     32 	{\Large Auteur~: \hfill Encadrant~: \\
     33 	Étienne Simon \hfill Ludovic Denoyer}
     34 	\vfill
     35 	\today
     36 \end{center}
     37 \end{titlepage}
     38 
     39 \tableofcontents
     40 \pagebreak
     41 
     42 \section{Aperçu du PIAD}
     43 \subsection{Objectifs}
     44 Ce PIAD est intitulé «~Vers une Machine d'apprentissage persistante.~»
     45 L'objectif sera d'écrire une plateforme pour l'apprentissage et le raisonnement sur des données hétérogènes.
     46 Les modèles ainsi appris devront être conservés dans une base de données en vue de leur réutilisation.
     47 
     48 \subsection{Références}
     49 L'ensemble du livrable est disponible sur un dépôt Mercurial, il est possible de le cloner avec la commande~:\\
     50 \indent\indent\verb|hg clone https://bitbucket.org/ejls/mi024|\\
     51 L'ensemble de la documentation y est présente, y compris ce document.
     52 
     53 \section{Organisation du PIAD}
     54 \subsection{Participants}
     55 Ce PIAD est réalisé par un seul étudiant~: Étienne Simon (numéro étudiant 3060576.)
     56 Il est encadré par Ludovic Denoyer (professeur au LIP6.)
     57 
     58 \subsection{Activités}
     59 
     60 \subsubsection{Phase 1~: Bases}
     61 \paragraph{Interfaçage avec \nmlp{}}
     62 Ajout d'opérateurs de serialisation aux classes de \nmlp{}, utilisation possible de Boost.Serialization.
     63 Il faudra ajouter les opérateurs sans modifier le code de \nmlp{} et prendre soin à discerner le code des objets CPU du code des objets GPU ainsi que les contraintes qui y sont liées (e.g. espace mémoire plus limité en GPU.)
     64 Il peut être intéressant d'avoir un format d'archive portable.
     65 
     66 \paragraph{Persistance}
     67 Gestion d'une base de donnée des objets de \nmlp{} en utilisant les opérateurs de serialisation écrits lors de la tâche précédente.
     68 Il faudra également stocker des métadonnées, par exemple un nom et une description pour les encodeur et les tests ou encore les paramètres d'apprentissage utilisés pour l'entraînement d'un modèle.
     69 Il sera intéressant d'avoir des identificateurs universels pour les modèles et les jeux de données (par exemple en les hachant).
     70 
     71 SQLite est déjà présent dans le dépôt de \nmlp{}.
     72 Pour s'assurer une plus grande flexibilité, une couche d'abstraction telle que SOCI sera utilisée.
     73 
     74 \paragraph{Supervision}
     75 Le superviseur est une interface pour manipuler les objets de \nmlp{} présents dans la base de données.
     76 C'est lui qui se charge de l'apprentissage des modèles sur les données présentes dans la base de données.
     77 Il devra permettre l'exécution de commandes telles que «~faire Z coups de gradients sur le modèle X avec le jeu de données Y.~»
     78 Pour cella, il s'appuiera sur les algorithmes implémentés dans \nmlp{}.
     79 
     80 \paragraph{Test}
     81 Après l'écriture du superviseur, il est possible de tester l'ensemble du code écrit jusqu'alors.
     82 Il sera question d'apprendre un modèle simple sur deux ou trois types de données différents.
     83 
     84 \subsubsection{Phase 2~: Développements}
     85 \paragraph{Contrôleur}
     86 Le contrôleur devra présenter une interface plus haut niveau que le superviseur.
     87 En acceptant des commandes par un protocole réseau et en lançant le superviseur en tâche de fond par exemple.
     88 Le contrôleur pourra également fournir une interface pour l'ajout de données.
     89 Cela se réduira à l'interprétation de requêtes récupérées par Boost.Asio.
     90 Dans un premier temps, le serveur devra accepter une seule connexion.
     91 Une file de requête pourra être crée pour la gestion de connexions simultanées.
     92 
     93 \paragraph{Parallélisation}
     94 Enfin, une optimisation intéressante consisterait à lancer plusieurs superviseurs concurrentiellement, voire d'utiliser Boost.MPI pour paralléliser les opérations sur plusieurs machines.
     95 
     96 \subsubsection{Documentations et tests}
     97 \paragraph{Documentation développeur}
     98 L'outil \emph{de facto} standard d'écriture de documentation développeur pour C++ est Doxygen.
     99 Ce n'est pas une dépendance de \nmlp{}, mais il est possible de générer la documentation séparément, cela ne devrait donc pas poser de problème.
    100 
    101 \paragraph{Documentation utilisateur}
    102 L'installation devrait être assez simple pour ne nécessiter rien de plus qu'un fichier INSTALL.
    103 Les binaires et leurs fonctionnalités devront cependant être décris entièrement.
    104 
    105 \paragraph{Tests unitaires}
    106 Les dépendances de \nmlp{} offrent déjà un \emph{framework} de test avec CTest et Boost.Test.
    107 Des tests unitaires seront écrit avec ces outils tout au long du développement.
    108 
    109 \subsection{Calendrier}
    110 \noindent
    111 \begin{tabular}{ | c | c | p{0.58\textwidth} | } \hline
    112 \multicolumn{1}{|c|}{\textbf{Date}} & \textbf{Semaine} & \multicolumn{1}{|c|}{\textbf{Description}}\\\hline
    113 \textit{24/02} & \textit{0} & \textit{Remise du cahier des charges et du plan de développement.}\\\hline
    114 \textbf{25/02-31/03} & \textbf{1..5} & \multicolumn{1}{|c|}{\textbf{Phase 1~: Bases}}\\\hline
    115 25/02-03/03 & 1 & Interfaçage avec \nmlp{}. Écriture des opérateurs de serialisation.\\
    116 04/03-10/03 & 2 & Utilisation d'une base de données pour activer la persistance des objets.\\
    117 11/03-24/03 & 3..4 & Écriture du superviseur. Utilisation des algorithmes de \nmlp{}.\\
    118 25/03-31/03 & 5 & Test du superviseur sur un jeu de données simple.\\\hline
    119 \textbf{01/04-05/05} & \textbf{6..10} & \multicolumn{1}{|c|}{\textbf{Phase 2~: Développements}}\\\hline
    120 01/04-14/03 & 6..7 & Mise en serveur autour d'un contrôleur.\\
    121 15/04-28/03 & 8..9 & Parallélisation du serveur.\\
    122 29/04-05/05 & 10 & Debug, test et documentation.\\\hline
    123 \textit{09/05} & \textit{11} & \textit{Remise du rapport final.}\\\hline
    124 \textit{13/05-20/05} & \textit{12} & \textit{Soutenance.}\\\hline
    125 \end{tabular}
    126 
    127 \end{document}